15.3 考慮する点
15章まとめ
インクリメンタルGCや並行GCの目標は、コレクタによる停止時間(ミューテータから見た)を最小にすることである。
インクリメンタル/並行技法は、経過時間の増加(ミューテータのスループット低下)と引き換えにコレクタによる擾乱を減少させているのが普通である。
コレクタによる擾乱とは、コレクタがやかましくてミューテータの実行を妨げていることを指している?
要するに停止時間が減って嬉しいということか。
コレクタとミューテータの間には通信や同期が必要なので、コレクタとミューテータを完全に並列に動作させることはできない。
バリアや競合(その中には、コレクタによるキャッシュの撹乱も含まれる)がミューテータも遅くするかも。
アプリケーションによってはインクリメンタル/並行によりスループットが上がることももちろんある。
ロード/ストアのコストはバリアで増えるが、停止時間を下げることになるので。
コストやトレードオフはいろいろな要素が絡む
用いる並行GC技法
並行参照カウントGC
並行マークスイープGC
並行コンパクションGC
並行コピーGC
リードバリアかライトバリアか
浮遊ごみ
ミューテータを停止するタイミング
ほとんどの並行GCでは、停止時間や空間的オーバーヘッドに関して、ごく緩やかな保証しか与えない
リアルタイム性を得るには、ミューテータの操作についてより明確な進行性保証と空間的保証が必要
インクリメンタルなGCや並行GCが特に望ましいのは、生きているデータの量が非常に大きくなると予測される場合
GCのスケジューリングは特に深刻な問題。第19章で述べる。
世代別GCと並行GCのハイブリッド方式
年少世代はストップザワールド
停止時間は数ミリ秒なので問題にならない
年長世代は並行GC
書き換え頻度が低いので、ライトバリアのコストが小さい